package com.itts.middle.config;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import javax.validation.constraints.Pattern;

/**
 * oss配置类
 * https://help.aliyun.com/product/31815.html?spm=5176.7933691.1309819.7.37282a66J2edON&aly_as=ELyo4nkt1
 */
@Data
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "ossconfig")
public class OssConfig {
    /**
     * sts接入地址
     * 参见：https://help.aliyun.com/document_detail/66053.html?spm=a2c4g.11186623.2.12.40ed38df3tKIjp
     */
    private String stsEndpoint ;
    /**
     * 访问密钥标识
     */
    private String accessKeyId;
    /**
     * 访问密钥
     */
    private String accessKeySecret ;
    /**
     * 指定角色的ARN
     * https://ram.console.aliyun.com/roles
     */
    private String roleArn ;
    /**
     * 此参数用来区分不同的Token，以标明谁在使用此Token，便于审计;
     * 格式：^[a-zA-Z0-9\.@\-_]+$
     */
    @Pattern(regexp = "^[a-zA-Z0-9\\.@\\-_]+$",message = "roleSessionNames格式不正确")
    private String roleSessionNames;

    /**
     * sts有效时间 单位秒 最大为3600最小900
     */
    private Long durationSeconds = 900L;
    /**
     * 权限策略。
     * 生成STS Token时可以指定一个额外的权限策略，以进一步限制STS Token的权限。若不指定则返回的Token拥有指定角色的所有权限。
     * 长度为1~1024个字符。
     * https://help.aliyun.com/document_detail/56288.html?spm=a2c4g.11186623.2.18.7d324c07Riv9Tk
     */
    private String policy = "{\n" +
            "    \"Version\": \"1\", \n" +
            "    \"Statement\": [\n" +
            "        {\n" +
            "            \"Action\": [\n" +
            "                \"oss:*\"\n" +
            "            ], \n" +
            "            \"Resource\": [\n" +
            "                \"acs:oss:*:*:*\" \n" +
            "            ], \n" +
            "            \"Effect\": \"Allow\"\n" +
            "        }\n" +
            "    ]\n" +
            "}";

    /**
     * https://help.aliyun.com/document_detail/31837.html#concept-zt4-cvy-5db
     */
    private String endpoint ;

    public OssConfig(@Pattern(regexp = "^[a-zA-Z0-9\\.@\\-_]+$", message = "roleSessionNames格式不正确") String roleSessionNames) {
        this.roleSessionNames = roleSessionNames;
    }

    /**
     * 点播服务接入区域
     */
    private String regionId;

    private String bucket;
}
